class: inverse,left, middle background-image: url(data:image/png;base64,#background.png) background-size: cover <img src="data:image/png;base64,#LOGO_DIPLOMADO.png" width="500px"/> ##Módulo 2: Fundamentos de programación en R para el análisis masivo de datos ### Ciclos, Condicionales y Funciones MatÃas Olea <br> <a href="https://orcid.org/0000-0003-0194-7784"> ORCID </a><br> matias.olea@pucv.cl</a><br> .large[<b><a href="https://www.pucv.cl/uuaa/site/edic/base/port/labgrs.html">LabGRS</a> | Septiembre 2025</b>] <br> --- ## Contenidos .pull-left[ 1) Qué es un Ciclo For. 2) Como construir un Ciclo For. 3) Condicionales If y Else. 4) Creacion de Funciones en R. ] .pull-right[ <img src="data:image/png;base64,#https://raw.githubusercontent.com/allisonhorst/stats-illustrations/main/rstats-artwork/r_rollercoaster.png" width="650px"/> ] --- ### Qué es un ciclo Un **ciclo** es la repetición de "n veces" una misma rutina. El más conocido y ocupado es el ciclo for. <center><img src="data:image/png;base64,#ej_ciclo.png" height="450px" /></center> --- ### Como construir un Ciclo for Un **ciclo for** se compone por: <center><img src="data:image/png;base64,#Loop.png" height="120px" /></center> En el ciclo representado la imagen de arriba, nos indica que el "Ãndice" **_i_** en nuestro primer ciclo tomará el valor del número 2, cuando termine ese ciclo, tomará el valor siguiente dentro del rango 2 a 11, es decir el número 3. Por ejemplo: ``` r for (i in 1:10) { Sys.sleep(1) # esto es solamente para que se demore 1 segundo entre ciclo y ciclo print(9 * i) } ``` Significa que en el primer ciclo, imprimirá (print) el resultado de (9 x **_i_**), es decir (9 x **1**), en el segundo (9 x **2**) y siguiento hasta que **_i_** alcance el valor final de nuestro Ãndice, que en este caso es **10**. --- Otro ejemplo de **ciclo** sencillo en dónde se repita un digitos tantas veces como valor lo indique. ``` r for (i in 2:8) { Sys.sleep(1) num <- rep(i, i) print(paste("REPITE ESTE NUMERO ", i, ", ", i, " VECES", sep = "")) print(num) } ``` ``` ## [1] "REPITE ESTE NUMERO 2, 2 VECES" ## [1] 2 2 ## [1] "REPITE ESTE NUMERO 3, 3 VECES" ## [1] 3 3 3 ## [1] "REPITE ESTE NUMERO 4, 4 VECES" ## [1] 4 4 4 4 ## [1] "REPITE ESTE NUMERO 5, 5 VECES" ## [1] 5 5 5 5 5 ## [1] "REPITE ESTE NUMERO 6, 6 VECES" ## [1] 6 6 6 6 6 6 ## [1] "REPITE ESTE NUMERO 7, 7 VECES" ## [1] 7 7 7 7 7 7 7 ## [1] "REPITE ESTE NUMERO 8, 8 VECES" ## [1] 8 8 8 8 8 8 8 8 ``` --- ## Condicionales If y Else. Los condicionales, son "ordenes" de como actuar (expresados en una rutina), en caso de que se cumpla cierta condición. **Si** (<u>if</u>), mi valor es ... la rutina debe hacer esto, **de otro modo** (<u>else</u>), o en caso de que no se cumpla if, la rutina debe hacer esto ... Por ejemplo, generaremos números aleatorios simulando temperatura. Cuando la temperatura sea mayor a 25 grados (es decir "<u>if the temperature is higher than 25 degrees ...</u>") se imprirá la frase "Temperatura Calurosa >:(", de otro modo (es decir, <u>else</u>) se imprimirá la frase "Temperatura Agradable :)" ``` r set.seed(50) temp <- rnorm(n = 50, mean = 24, sd = 3) ``` ``` ## [1] 25.64901 21.47519 24.09899 25.57245 18.81719 23.16641 25.08249 22.22726 ## [9] 26.92677 19.66275 24.88562 25.66426 22.50409 24.58720 22.63338 22.91143 ## [17] 23.52956 21.70425 20.50195 23.02972 22.95022 22.23931 19.23037 29.06868 ## [25] 25.69075 32.00290 25.06960 22.91364 25.70624 24.08602 24.59707 21.44573 ## [33] 20.60865 25.79175 20.71186 24.05729 25.24860 29.51903 25.21856 25.17967 ## [41] 24.32867 22.75974 24.33539 15.32304 24.28605 25.49967 26.84812 19.02480 ## [49] 19.55514 22.52794 ``` --- ## Condicionales If y Else. ``` r for (i in 1:length(temp)) { Sys.sleep(0.5) val <- temp[i] if (val > 25) { print("Temperatura Calurosa >:(") } else { print("Temperatura Agradable :)") } } ``` ``` ## [1] "Temperatura Calurosa >:(" ## [1] "Temperatura Agradable :)" ## [1] "Temperatura Agradable :)" ## [1] "Temperatura Calurosa >:(" ## [1] "Temperatura Agradable :)" ## [1] "Temperatura Agradable :)" ## [1] "Temperatura Calurosa >:(" ## [1] "Temperatura Agradable :)" ## [1] "Temperatura Calurosa >:(" ## [1] "Temperatura Agradable :)" ## [1] "Temperatura Agradable :)" ``` --- ## Funciones Crearemos una **función** que calcule grados Fahrenheit a partir de grados Celsius -- ``` r CaF <- function(C_temp) { (C_temp * 9 / 5) + 32 } ``` ``` r CaF(temp) ``` ``` ## [1] 78.16822 70.65534 75.37819 78.03041 65.87094 73.69953 77.14847 72.00907 ## [9] 80.46819 67.39295 76.79412 78.19566 72.50737 76.25696 72.74008 73.24058 ## [17] 74.35321 71.06764 68.90351 73.45350 73.31039 72.03076 66.61466 84.32362 ## [25] 78.24335 89.60522 77.12529 73.24455 78.27123 75.35484 76.27473 70.60232 ## [33] 69.09557 78.42514 69.28134 75.30312 77.44747 85.13425 77.39341 77.32340 ## [41] 75.79160 72.96754 75.80370 59.58146 75.71489 77.89941 80.32661 66.24463 ## [49] 67.19925 72.55029 ``` --- **TAREA 1** a) Elabore un diagrama de flujo estandar para transformar la rutina que se hizo en la clase de cartografÃas, en un ciclo for. b) Responda: ¿Cuales serán sus inputs? ¿cuales de esos inputs cambiarán en cada ciclo? ¿ ¿que elementos de la cartografÃa serán reemplazados ciclo a ciclo? c) Transforme su diagrama de flujo en un ciclo for para para generar una rutina que le permita hacer cartografias de todas las regiones del pais. Antes de todo, recuerde eliminar Isla de Pascua y el Archipielago de Juan Fernandez de su input. --- ### BibliografÃa 2022 Jerry Davis. Introduction to Environmental Data Science. Capitulo 8.Raster Spatial Analysis. https://bookdown.org/igisc/EnvDataSci/raster-spatial-analysis.html 2022 Robert J. Hijmans. terra.pdf. https://cran.r-project.org/web/packages/terra/terra.pdf 2012 Essentials of Geographic Information Systems. Chapter 8.Geospatial Analysis II: Raster Data. https://saylordotorg.github.io/text_essentials-of-geographic-information-systems/s12-geospatial-analysis-ii-raster-.html